home *** CD-ROM | disk | FTP | other *** search
/ Kit PC World De Ampliacion De Windows 95 / Kit PC World de ampliacion de Windows 95.iso / internet / sweeper / samples / olecon~1 / controls / localize / locali~1.cpp < prev    next >
Text File  |  1995-11-25  |  12KB  |  406 lines

  1. //=--------------------------------------------------------------------------=
  2. // LocalizeCtl.Cpp
  3. //=--------------------------------------------------------------------------=
  4. // Copyright  1995  Microsoft Corporation.  All Rights Reserved.
  5. //
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  7. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  8. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  9. // PARTICULAR PURPOSE.
  10. //=--------------------------------------------------------------------------=
  11. //
  12. //
  13. //
  14. #include "IPServer.H"
  15.  
  16. #include "Guids.H"
  17. #include "LocalizeCtl.H"
  18. #include "LocalObj.H"
  19. #include "Util.H"
  20. #include "Globals.H"
  21. #include "Resource.H"
  22.  
  23. // for ASSERT and FAIL
  24. //
  25. SZTHISFILE
  26.  
  27.  
  28. //=--------------------------------------------------------------------------=
  29. // all the events in this control
  30. //
  31. // TODO: add events here ...
  32. //
  33.  
  34. //=--------------------------------------------------------------------------=
  35. // array describing all of our property pages.  these clsids are typically
  36. // in guids.h
  37. //
  38. // TODO: add any additional property page guids here ...
  39. //
  40. const GUID *rgLocalizePropPages [] = {
  41.     &CLSID_LocalizeGeneralPage
  42. };
  43.  
  44. //=--------------------------------------------------------------------------=
  45. // Custum Verb information
  46. //
  47. // TODO: add any custom verbs here in an array, using the VERBINFO structure.
  48. //       then mark the controld def'n in LocalizeCtl.H with
  49. //       this verb array
  50. //
  51.  
  52.  
  53. //=--------------------------------------------------------------------------=
  54. // CLocalizeControl::Create
  55. //=--------------------------------------------------------------------------=
  56. // global static function that creates an instance of the control an returns
  57. // an IUnknown pointer for it.
  58. //
  59. // Parameters:
  60. //    IUnknown *        - [in] controlling unknown for aggregation
  61. //
  62. // Output:
  63. //    IUnknown *        - new object.
  64. //
  65. // Notes:
  66. //
  67. IUnknown *CLocalizeControl::Create
  68. (
  69.     IUnknown *pUnkOuter
  70. )
  71. {
  72.     // make sure we return the private unknown so that we support aggegation
  73.     // correctly!
  74.     //
  75.     CLocalizeControl *pNew = new CLocalizeControl(pUnkOuter);
  76.     return pNew->PrivateUnknown();
  77. }
  78.  
  79. //=--------------------------------------------------------------------------=
  80. // CLocalizeControl::CLocalizeControl
  81. //=--------------------------------------------------------------------------=
  82. // "Being born is like being kidnapped.  And then sold into slavery."
  83. //    - andy warhol (1928 - 87)
  84. //
  85. // Parameters:
  86. //    IUnknown *        - [in]
  87. //
  88. // Notes:
  89. //
  90. #pragma warning(disable:4355)  // using 'this' in constructor
  91. CLocalizeControl::CLocalizeControl
  92. (
  93.     IUnknown *pUnkOuter
  94. )
  95. : COleControl(pUnkOuter, OBJECT_TYPE_CTLLOCALIZE, (IDispatch *)this)
  96. {
  97.     // initialize anything here ...
  98.     //
  99.     memset(&m_state, 0, sizeof(LOCALIZECTLSTATE));
  100.  
  101.     // TODO: initialize anything you need to here.
  102.  
  103. }
  104. #pragma warning(default:4355)  // using 'this' in constructor
  105.  
  106. //=--------------------------------------------------------------------------=
  107. // CLocalizeControl::~CLocalizeControl
  108. //=--------------------------------------------------------------------------=
  109. // "We all labour against our own cure, for death is the cure of all diseases"
  110. //    - Sir Thomas Browne (1605 - 82)
  111. //
  112. // Notes:
  113. //
  114. CLocalizeControl::~CLocalizeControl ()
  115. {
  116.     // TODO: clean up anything here.
  117. }
  118.  
  119. //=--------------------------------------------------------------------------=
  120. // CLocalizeControl:RegisterClassData
  121. //=--------------------------------------------------------------------------=
  122. // register the window class information for your control here.
  123. // this information will automatically get cleaned up for you on DLL shutdown.
  124. //
  125. // Output:
  126. //    BOOL            - FALSE means fatal error.
  127. //
  128. // Notes:
  129. //
  130. BOOL CLocalizeControl::RegisterClassData
  131. (
  132.     void
  133. )
  134. {
  135.     WNDCLASS wndclass;
  136.  
  137.     // TODO: register any additional information you find interesting here.
  138.     //       this method is only called once for each type of control
  139.     //
  140.     memset(&wndclass, 0, sizeof(WNDCLASS));
  141.     wndclass.style          = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
  142.     wndclass.lpfnWndProc    = COleControl::ControlWindowProc;
  143.     wndclass.hInstance      = g_hInstance;
  144.     wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
  145.     wndclass.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
  146.     wndclass.lpszClassName  = WNDCLASSNAMEOFCONTROL(OBJECT_TYPE_CTLLOCALIZE);
  147.  
  148.     return RegisterClass(&wndclass);
  149. }
  150.  
  151. //=--------------------------------------------------------------------------=
  152. // CLocalizeControl::BeforeCreateWindow
  153. //=--------------------------------------------------------------------------=
  154. // called just before the window is created.  Great place to set up the
  155. // window title, etc, so that they're passed in to the call to CreateWindowEx.
  156. // speeds things up slightly.
  157. //
  158. // Notes:
  159. //
  160. void CLocalizeControl::BeforeCreateWindow
  161. (
  162.     void
  163. )
  164. {
  165.     // TODO: users should modify m_dwWindowStyle, m_dwWindowStyleEx, m_szWindowTitle
  166.     // et al here so that the call to createwindow has as much information as
  167.     // possible.
  168.     // if you don't use this function, then you can probably just remove it.
  169. }
  170.  
  171. //=--------------------------------------------------------------------------=
  172. // CLocalizeControl::InternalQueryInterface
  173. //=--------------------------------------------------------------------------=
  174. // qi for things only we support.
  175. //
  176. // Parameters:
  177. // Parameters:
  178. //    REFIID        - [in]  interface they want
  179. //    void **       - [out] where they want to put the resulting object ptr.
  180. //
  181. // Output:
  182. //    HRESULT       - S_OK, E_NOINTERFACE
  183. //
  184. // Notes:
  185. //
  186. HRESULT CLocalizeControl::InternalQueryInterface
  187. (
  188.     REFIID  riid,
  189.     void  **ppvObjOut
  190. )
  191. {
  192.     IUnknown *pUnk;
  193.  
  194.     *ppvObjOut = NULL;
  195.  
  196.     // TODO: if you want to support any additional interrfaces, then you should
  197.     // indicate that here.  never forget to call COleControl's version in the
  198.     // case where you don't support the given interface.
  199.     //
  200.     if (DO_GUIDS_MATCH(riid, IID_ILocalize)) {
  201.         pUnk = (IUnknown *)(ILocalize *)this;
  202.     } else{
  203.         return COleControl::InternalQueryInterface(riid, ppvObjOut);
  204.     }
  205.  
  206.     pUnk->AddRef();
  207.     *ppvObjOut = (void *)pUnk;
  208.     return S_OK;
  209. }
  210.  
  211. //=--------------------------------------------------------------------------=
  212. // CLocalizeControl::LoadTextState
  213. //=--------------------------------------------------------------------------=
  214. // load in our text state for this control.
  215. //
  216. // Parameters:
  217. //    IPropertyBag *        - [in] property bag to read from
  218. //    IErrorLog *           - [in] errorlog object to use with proeprty bag
  219. //
  220. // Output:
  221. //    HRESULT
  222. //
  223. // Notes:
  224. //    - NOTE: if you have a binary object, then you should pass an unknown
  225. //      pointer to the property bag, and it will QI it for IPersistStream, and
  226. //      get said object to do a Load()
  227. //
  228. STDMETHODIMP CLocalizeControl::LoadTextState
  229. (
  230.     IPropertyBag *pPropertyBag,
  231.     IErrorLog    *pErrorLog
  232. )
  233. {
  234.     // TODO: implement your text load code here.
  235.     //
  236.     return S_OK;
  237. }
  238.  
  239. //=--------------------------------------------------------------------------=
  240. // CLocalizeControl::LoadBinaryState
  241. //=--------------------------------------------------------------------------=
  242. // loads in our binary state using streams.
  243. //
  244. // Parameters:
  245. //    IStream *            - [in] stream to write to.
  246. //
  247. // Output:
  248. //    HRESULT
  249. //
  250. // Notes:
  251. //
  252. STDMETHODIMP CLocalizeControl::LoadBinaryState
  253. (
  254.     IStream *pStream
  255. )
  256. {
  257.     // TODO: implement your binary load code here.  to prevent this from being
  258.     // a massive performance sink, you should probably try to organize your
  259.     // properties in such a way that enables you to do just one IStream::Read
  260.     // in the LoadBinaryState function.  fast is good.
  261.     //
  262.     return S_OK;
  263. }
  264.  
  265. //=--------------------------------------------------------------------------=
  266. // CLocalizeControl::SaveTextState
  267. //=--------------------------------------------------------------------------=
  268. // saves out the text state for this control using a property bag.
  269. //
  270. // Parameters:
  271. //    IPropertyBag *        - [in] the property bag with which to work.
  272. //    BOOL                  - [in] if TRUE, then write out ALL properties, even
  273. //                            if they're their the default value ...
  274. //
  275. // Output:
  276. //    HRESULT
  277. //
  278. // Notes:
  279. //
  280. STDMETHODIMP CLocalizeControl::SaveTextState
  281. (
  282.     IPropertyBag *pPropertyBag,
  283.     BOOL          fWriteDefaults
  284. )
  285. {
  286.     // TODO: implement your text save code here.
  287.     //
  288.     return S_OK;
  289. }
  290.  
  291. //=--------------------------------------------------------------------------=
  292. // CLocalizeControl::SaveBinaryState
  293. //=--------------------------------------------------------------------------=
  294. // save out the binary state for this control, using the given IStream object.
  295. //
  296. // Parameters:
  297. //    IStream  *             - [in] save to which you should save.
  298. //
  299. // Output:
  300. //    HRESULT
  301. //
  302. // Notes:
  303. //    - it is important that you seek to the end of where you saved your
  304. //      properties when you're done with the IStream.
  305. //
  306. STDMETHODIMP CLocalizeControl::SaveBinaryState
  307. (
  308.     IStream *pStream
  309. )
  310. {
  311.     // TODO: implement your binary save state code here.  to prevent this from being
  312.     // a massive performance sink, you should probably try to organize your
  313.     // properties in such a way that enables you to do just one IStream::Read
  314.     // in the LoadBinaryState function.  fast is good.
  315.     //
  316.     return S_OK;
  317. }
  318.  
  319.  
  320. //=--------------------------------------------------------------------------=
  321. // CLocalizeControl::OnDraw
  322. //=--------------------------------------------------------------------------=
  323. // "I don't very much enjoy looking at paintings in general.  i know too
  324. //  much about them.  i take them apart."
  325. //    - georgia o'keeffe (1887-1986)
  326. //
  327. // Parameters:
  328. //    HDC                - [in]  HDC to draw to
  329. //    LPCRECTL           - [in]  rect we're drawing to
  330. //    LPCRECTL           - [in]  window extent and origin for meta-files
  331. //    HDC                - [in]  HIC for target device
  332. //
  333. // Output:
  334. //    HRESULT
  335. //
  336. // Notes:
  337. //
  338. HRESULT CLocalizeControl::OnDraw
  339. (
  340.     HDC      hdcDraw,
  341.     LPCRECTL prcBounds,
  342.     LPCRECTL prcWBounds,
  343.     HDC      hicTargetDevice
  344. )
  345. {
  346.     HPEN hpen, hpenOld;
  347.  
  348.     hpen = CreatePen(PS_SOLID, 2, RGB(0,255,0));
  349.     if (!hpen)
  350.         return E_FAIL;
  351.  
  352.     hpenOld = SelectObject(hdcDraw, hpen);
  353.     Ellipse(hdcDraw, prcBounds->left, prcBounds->top, prcBounds->right, prcBounds->bottom);
  354.     SelectObject(hdcDraw, hpenOld);
  355.     DeleteObject(hpen);
  356.  
  357.     return S_OK;
  358. }
  359.  
  360. //=--------------------------------------------------------------------------=
  361. // CLocalizeControl::WindowProc
  362. //=--------------------------------------------------------------------------=
  363. // window procedure for this control.  nothing terribly exciting.
  364. //
  365. // Parameters:
  366. //     see win32sdk on window procs.
  367. //
  368. // Notes:
  369. //
  370. LRESULT CLocalizeControl::WindowProc
  371. (
  372.     HWND   hwnd,
  373.     UINT   msg,
  374.     WPARAM wParam,
  375.     LPARAM lParam
  376. )
  377. {
  378.     // TODO: handle any messages here, like in a normal window
  379.     // proc.  note that for special keys, you'll want to override and
  380.     // implement OnSpecialKey.
  381.     //
  382.     return DefWindowProc(hwnd, msg, wParam, lParam);
  383. }
  384.  
  385. //=--------------------------------------------------------------------------=
  386. // CLocalizeControl::AboutBox
  387. //=--------------------------------------------------------------------------=
  388. // prints up an about box.  fweeeee.
  389. //
  390. // Notes:
  391. //
  392. void CLocalizeControl::AboutBox
  393. (
  394.     void
  395. )
  396. {
  397.     // TODO: Ideally, one would use DialogBox, and some sort of Dialog Box here if
  398.     // they wanted a slightly more interesting About Box ...  you should
  399.     // still call ModalDialog first, however.
  400.     //
  401.     ModalDialog(TRUE);
  402.     MessageBox(NULL, "This is My Control", "About Localize", MB_OK | MB_TASKMODAL);
  403.     ModalDialog(FALSE);
  404. }
  405.  
  406.